'\" te
.\" Copyright 1989 AT&T
.\" Portions Copyright (c) 1996, Sun Microsystems, Inc. All Rights Reserved.
.\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
.\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
.TH CURS_KERNEL 3CURSES "Feb 17, 2023"
.SH NAME
curs_kernel, def_prog_mode, def_shell_mode, reset_prog_mode, reset_shell_mode,
resetty, savetty, getsyx, setsyx, ripoffline, curs_set, napms \- low-level
curses routines
.SH SYNOPSIS
.nf
\fBcc\fR [ \fIflag\fR ... ] \fIfile\fR ... \fB-lcurses\fR [ \fIlibrary\fR ... ]
#include <curses.h>

\fBint\fR \fBdef_prog_mode\fR(\fBvoid\fR);
.fi

.LP
.nf
\fBint\fR \fBdef_shell_mode\fR(\fBvoid\fR);
.fi

.LP
.nf
\fBint\fR \fBreset_prog_mode\fR(\fBvoid\fR);
.fi

.LP
.nf
\fBint\fR \fBreset_shell_mode\fR(\fBvoid\fR);
.fi

.LP
.nf
\fBint\fR \fBresetty\fR(\fBvoid\fR);
.fi

.LP
.nf
\fBint\fR \fBsavetty\fR(\fBvoid\fR);
.fi

.LP
.nf
\fBint\fR \fBgetsyx\fR(\fBint\fR \fIy\fR, \fBint\fR \fIx\fR);
.fi

.LP
.nf
\fBint\fR \fBsetsyx\fR(\fBint\fR \fIy\fR, \fBint\fR \fIx\fR);
.fi

.LP
.nf
\fBint\fR \fBripoffline\fR(\fBint\fR \fIline\fR, \fBint (*\fR\fIinit\fR)(WINDOW *, \fBint)\fR);
.fi

.LP
.nf
\fBint\fR \fBcurs_set\fR(\fBint\fR \fIvisibility\fR);
.fi

.LP
.nf
\fBint\fR \fBnapms\fR(\fBint\fR \fIms\fR);
.fi

.SH DESCRIPTION
The following routines give low-level access to various \fBcurses\fR
functionality. These routines typically are used inside library routines.
.sp
.LP
The \fBdef_prog_mode()\fR and \fBdef_shell_mode()\fR routines save the current
terminal modes as the ``program'' (in \fBcurses\fR) or ``shell'' (not in
\fBcurses\fR) state for use by the \fBreset_prog_mode()\fR and
\fBreset_shell_mode()\fR routines. This is done automatically by
\fBinitscr()\fR.
.sp
.LP
The \fBreset_prog_mode()\fR and \fBreset_shell_mode()\fR routines restore the
terminal to ``program'' (in \fBcurses\fR) or ``shell'' (out of \fBcurses\fR)
state. These are done automatically by \fBendwin()\fR and, after an
\fBendwin()\fR, by \fBdoupdate()\fR, so they normally are not called.
.sp
.LP
The \fBresetty()\fR and \fBsavetty()\fR routines save and restore the state of
the terminal modes. \fBsavetty()\fR saves the current state in a buffer and
\fBresetty()\fR restores the state to what it was at the last call to
\fBsavetty()\fR.
.sp
.LP
With the \fBgetsyx()\fR routine, the current coordinates of the virtual screen
cursor are returned in \fIy\fR and \fIx.\fR If \fBleaveok()\fR is currently
\fBTRUE\fR, then \fB\(mi1\fR,\fB\(mi1\fR is returned. If lines have been
removed from the top of the screen, using \fBripoffline()\fR, \fIy\fR and
\fIx\fR include these lines; therefore, \fIy\fR and \fIx\fR should be used only
as arguments for  \fBsetsyx()\fR.
.sp
.LP
With the \fBsetsyx()\fR routine, the virtual screen cursor is set to \fIy\fR,
\fIx\fR. If \fIy\fR and \fIx\fR are both \fB\(mi1\fR, then \fBleaveok()\fR is
set. The two routines \fBgetsyx()\fR and \fBsetsyx()\fR are designed to be used
by a library routine, which manipulates \fBcurses\fR windows but does not want
to change the current position of the program's cursor. The library routine
would call \fBgetsyx()\fR at the beginning, do its manipulation of its own
windows, do a \fBwnoutrefresh()\fR on its windows, call \fBsetsyx()\fR, and
then call \fBdoupdate()\fR.
.sp
.LP
The \fBripoffline()\fR routine provides access to the same facility that
\fBslk_init()\fR (see \fBcurs_slk\fR(3CURSES)) uses to reduce the size of the
screen. \fBripoffline()\fR must be called before \fBinitscr()\fR or
\fBnewterm()\fR is called. If \fBline\fR is positive, a line is removed from
the top of \fBstdscr()\fR; if \fBline\fR is negative, a line is removed from
the bottom. When this is done inside \fBinitscr()\fR, the routine \fBinit()\fR
(supplied by the user) is called with two arguments: a window pointer to the
one-line window that has been allocated and an integer with the number of
columns in the window. Inside this initialization routine, the integer
variables \fBLINES\fR and \fBCOLS\fR (defined in \fB<curses.h>\fR) are not
guaranteed to be accurate and \fBwrefresh()\fR or \fBdoupdate()\fR must not be
called. It is allowable to call \fBwnoutrefresh()\fR during the initialization
routine.
.sp
.LP
\fBripoffline()\fR can be called up to five times before calling
\fBinitscr()\fR or \fBnewterm()\fR.
.sp
.LP
With the \fBcurs_set()\fR routine, the cursor state is set to invisible,
normal, or very visible for \fIvisibility\fR equal to \fB0\fR, \fB1\fR, or
\fB2\fR respectively. If the terminal supports the  \fIvisibility\fR requested,
the previous  \fIcursor\fR state is returned; otherwise, \fBERR\fR is returned.
.sp
.LP
The \fBnapms()\fR routine is used to sleep for \fIms\fR milliseconds.
.SH RETURN VALUES
Except for \fBcurs_set()\fR, these routines always return \fBOK\fR.
\fBcurs_set()\fR returns the previous cursor state, or \fBERR\fR if the
requested \fIvisibility\fR is not supported.
.SH ATTRIBUTES
See \fBattributes\fR(7) for descriptions of the following attributes:
.sp

.sp
.TS
box;
c | c
l | l .
ATTRIBUTE TYPE	ATTRIBUTE VALUE
_
MT-Level	Unsafe
.TE

.SH SEE ALSO
.BR curs_initscr (3CURSES),
.BR curs_outopts (3CURSES),
.BR curs_refresh (3CURSES),
.BR curs_scr_dump (3CURSES),
.BR curs_slk (3CURSES),
.BR curses (3CURSES),
.BR attributes (7)
.SH NOTES
The header <\fBcurses.h\fR> automatically includes the headers  <\fBstdio.h\fR>
and <\fBunctrl.h\fR>.
.sp
.LP
Note that \fBgetsyx()\fR is a macro, so an ampersand (\fB&\fR) is not necessary
before the variables \fIy\fR and \fIx\fR.
